package 并发编程02.CAS循环;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class Counter {
    private AtomicInteger atomic=new AtomicInteger(0);
    private int i=0;

    public void count(){
        i++;
    }

    public void safeCount(){
        atomic.incrementAndGet();
    }

    public static void main(String[] args) throws InterruptedException {
        final Counter cas=new Counter();
        List<Thread> threadList=new ArrayList<>();
        for(int i=0;i<100000;i++){
            Thread t1=new Thread(new Runnable() {
                @Override
                public void run() {
                    cas.count();
                    cas.safeCount();
                }
            });
            threadList.add(t1);
        }
        //开启线程
        for (Thread thread : threadList) {
            thread.start();
        }
        for (Thread thread : threadList) {
            /**join的意思是使得放弃当前线程的执行，并返回对应的线程，例如下面代码的意思就是：
             程序在main线程中调用thread线程的join方法，则main线程放弃cpu控制权，并返回thread线程继续执行直到线程t1执行完毕
             所以结果是thread线程执行完后，才到主线程执行，相当于在main线程中同步t1线程，thread执行完了，main线程才有执行的机会
             */
            thread.join();
        }
        System.out.println("not safe:"+cas.i);
        System.out.println("safe:"+cas.atomic);


    }





}
